package br.com.monise.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import br.com.monise.model.Aprendiz;
import br.com.monise.model.Caracteristicas;
import br.com.monise.model.CaracteristicasAprendiz;
import br.com.monise.util.GenericDao;

public class CaracteristicasAprendizDAO extends
		GenericDao<CaracteristicasAprendiz> {

	public List<CaracteristicasAprendiz> getCaracteristicas(Aprendiz parceiro) {
		EntityManager manager = getEntityManager();

		manager.getTransaction().begin();
		Query query = manager
				.createQuery("SELECT a from CaracteristicasParceiro a where a.parceiro.pkParceiro=:parceiro");
		query.setParameter("parceiro", parceiro.getIdAprendiz());

		@SuppressWarnings("unchecked")
		List<CaracteristicasAprendiz> caracteristicas = query.getResultList();

		manager.getTransaction().commit();
		// manager.close();

		return caracteristicas;
	}

	public CaracteristicasAprendiz getCaracteristicasParceiro(
			Caracteristicas caracteristica) {
		EntityManager manager = getEntityManager();

		manager.getTransaction().begin();
		Query query = manager
				.createQuery("SELECT a from CaracteristicasParceiro a where a.caracteristicas.pkCaracteristicas=:caracteristica");
		query.setParameter("caracteristica",
				caracteristica.getIdCaracteristicas());

		CaracteristicasAprendiz caracteristicasParceiro = (CaracteristicasAprendiz) query
				.getSingleResult();

		manager.getTransaction().commit();
		// manager.close();

		return caracteristicasParceiro;
	}

	public CaracteristicasAprendiz getCaracteristicasParceiro(Aprendiz parceiro) {
		EntityManager manager = getEntityManager();

		manager.getTransaction().begin();
		Query query = manager
				.createQuery("SELECT a from CaracteristicasParceiro a where a.parceiro.pkParceiro=:parceiro");
		query.setParameter("parceiro", parceiro.getIdAprendiz());

		CaracteristicasAprendiz caracteristicas = (CaracteristicasAprendiz) query
				.getSingleResult();

		manager.getTransaction().commit();
		// manager.close();

		return caracteristicas;
	}

	public CaracteristicasAprendiz getCaracteristicasParceiro(
			Caracteristicas caracteristica, Aprendiz parceiro) {
	
		EntityManager manager = getEntityManager();
		try {

			manager.getTransaction().begin();
			Query query = manager
					.createQuery("SELECT a from CaracteristicasAprendiz a where a.caracteristica.idCaracteristicas=:caracteristica and a.aprendiz.idAprendiz=:aprendiz");
			query.setParameter("caracteristica",
					caracteristica.getIdCaracteristicas());
			query.setParameter("aprendiz", parceiro.getIdAprendiz());

			CaracteristicasAprendiz caracteristicasParceiro;

			caracteristicasParceiro = (CaracteristicasAprendiz) query
					.getSingleResult();
			manager.getTransaction().commit();
			
			//manager.getTransaction().
			
			return caracteristicasParceiro;
		} catch (NoResultException nre) {
			
			manager.getTransaction().rollback();
			return null;
		}
		
		/*finally{
			if(manager.isOpen()){
				manager.close();
			}
		}*/

	}
}
